package com.wxg.print;

import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.wxg.utils.MyFileWriter;

/**
 * date : 2018年2月8日<br>
 * 使用Jsoup解析html字符串或者html文件<br>
 * 为block元素添加上id属性: 默认添加"id_(1++)"类型的id属性<br>
 * 将新的文档存储到本地磁盘<br>
 * 
 * 
 * @author Wxg
 *
 */
public class StoreHtmlWithGenId {
	private String prefix;
	// private static int _id; // id字段可以不用添加static修饰的,因为只在store方法中会用到(并累加)
	// private String storeFilepath; // 后来决定直接有方法返回
	private int _id;
	
	public StoreHtmlWithGenId(String prefix){
		this.prefix = prefix;
		_id = 1;
	}
	
	public StoreHtmlWithGenId(){
		this("id_");
	}
	
	/**
	 * 接收html片段,返回存储的html文件地址
	 * @param htmlStr
	 * @return
	 */
	public String store(String htmlStr){
		return parseAndStore( getDoc(htmlStr) );
	}
	
	/**
	 * 接收html文件地址,返回存储的html文件地址
	 * @param htmlFile
	 * @return
	 */
	public String store(File htmlFile){
		return parseAndStore( getDoc(htmlFile) );
	}
	
	private String parseAndStore(Document doc){
		if(null != doc){
			
			/**
			 * Add: 2018年2月10日
			 */
			Element head = doc.head();
//			head.getElementsByAttribute(key);
			Elements contentTypeS = head.getElementsByAttributeValue("http-equiv", "Content-Type");
			if( null == contentTypeS || contentTypeS.size() == 0 ){
				// writer.writeb("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>");
				head.appendElement("meta").attr("http-equiv", "Content-Type")
					.attr("content", "text/html;charset=utf-8");
			}
			
			Element body = doc.body();
			
			Elements eles = body.children(); // body.getAllElements();
			
			for(Element ele : eles){
				if(!"body".equalsIgnoreCase(ele.tagName())){
					if(ele.isBlock()){
						ele.attr("id", prefix + (_id++));
					}
				}
			}
			
			MyFileWriter myw = new MyFileWriter(); // 无参构造方法将使用默认的存储地址
			myw.writeb( doc.toString() );
			myw.close();
			return myw.getFilepath();
		}
		return null;
	}
	
	private Document getDoc(String htmlStr){
		return Jsoup.parse(htmlStr);
	}
	
	private Document getDoc(File htmlFile){
		Document doc = null;
		try {
			doc = Jsoup.parse(htmlFile, "UTF-8");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return doc;
	}

	public String getPrefix() {
		return prefix;
	}

}
